package com.etc.controller;

import java.io.File;
import java.io.IOException;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.io.FileUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;

@Controller
@RequestMapping(value = "uploadapi")
public class FileUploadController {

	@RequestMapping(value = "fileUpload", method = RequestMethod.POST)
	public String fileUpload(String name, HttpServletRequest request) {

		// 1.怎么得到上传的文件？
		MultipartHttpServletRequest req = (MultipartHttpServletRequest) request;
		// req有一个getFile(),得到一个MultipartFile类型
		MultipartFile file = req.getFile("myfile");

		// 输出表单的信息
		// 表单中其他域的信息
		System.out.println("name:" + name);

		// 上传文件的实际类型
		System.out.println("file.getContentType:" + file.getContentType());

		// 文本域的name
		System.out.println("file.getName:" + file.getName());

		// 文件名
		System.out.println("file.getOriginalFilename:" + file.getOriginalFilename());

		// 文件的大小，字节为单位
		System.out.println("file.getSize:" + file.getSize());

		// 2.文件上传的动作：将哪个文件上传到哪里？
		// 这个file要指定目录和文件名的信息
		String destpath = req.getRealPath("photo") + "/" + file.getOriginalFilename();
		System.out.println("destpath:" + destpath);
		// 指定路径
		File destFile = new File(destpath);
		// 上传操作
		// inputstream 第一个参数
		// File 第二个参数
		try {
			FileUtils.copyInputStreamToFile(file.getInputStream(), destFile);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return "fileUpload";

	}

	/**
	 * 可将MultipartFile file写在参数内，下面的路径req需要改成request MultipartFile
	 * file的file要与表单传过来的文件名一致
	 * 
	 * @param name
	 * @param request
	 * @param file
	 * @return
	 */
	@RequestMapping(value = "fileUpload02", method = RequestMethod.POST)
	public String fileUpload02(String name, HttpServletRequest request, @RequestParam MultipartFile file) {

		// 1.怎么得到上传的文件？
		// MultipartHttpServletRequest req = (MultipartHttpServletRequest) request;
		// req有一个getFile(),得到一个MultipartFile类型
		// MultipartFile file = req.getFile("file");

		// 输出表单的信息
		// 表单中其他域的信息
		System.out.println("name:" + name);

		// 上传文件的实际类型
		System.out.println("file.getContentType:" + file.getContentType());

		// 文本域的name
		System.out.println("file.getName:" + file.getName());

		// 文件名
		System.out.println("file.getOriginalFilename:" + file.getOriginalFilename());

		// 文件的大小，字节为单位
		System.out.println("file.getSize:" + file.getSize());

		// 2.文件上传的动作：将哪个文件上传到哪里？
		// 这个file要指定目录和文件名的信息
		String destpath = request.getRealPath("photo") + "/" + file.getOriginalFilename();
		System.out.println("destpath:" + destpath);
		// 指定路径
		File destFile = new File(destpath);
		// 上传操作
		// inputstream 第一个参数
		// File 第二个参数
		try {
			FileUtils.copyInputStreamToFile(file.getInputStream(), destFile);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return "fileUpload";

	}

	/**
	 * 多文件上传
	 * 
	 * @param name
	 * @param request
	 * @param file
	 * @return
	 */
	@RequestMapping(value = "fileUpload03", method = RequestMethod.POST)
	public String fileUpload03(String name, HttpServletRequest request, @RequestParam MultipartFile[] file) {

		// 1.怎么得到上传的文件？
		// 输出表单的信息
		// 表单中其他域的信息
		System.out.println("name:" + name);

		for (MultipartFile f : file) {
			// 文件名
			System.out.println("file.getOriginalFilename:" + f.getOriginalFilename());

			// 2.文件上传的动作：将哪个文件上传到哪里？
			if (!f.getOriginalFilename().isEmpty()) {
				// 这个file要指定目录和文件名的信息
				String destpath = request.getRealPath("photo") + "/" + f.getOriginalFilename();
				System.out.println("destpath:" + destpath);
				// 指定路径
				File destFile = new File(destpath);
				// 上传操作
				// inputstream 第一个参数
				// File 第二个参数
				try {
					FileUtils.copyInputStreamToFile(f.getInputStream(), destFile);
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}

		}

		return "fileUpload";

	}

}
